package com.bb.flow.parser.impl.parsejson.parsenode;

import com.alibaba.fastjson2.JSONObject;
import com.bb.flow.api.exception.ParseException;
import com.bb.flow.config.AbstractConfigNode;

/**
 * @author bigbeard
 * 解析流程陪在配置节点
 */
public interface IParseNode {
    /**
     * 解析节点信息
     *
     * @param jsonObject       JSON配置信息
     * @param flowTemplateName 流程模版名称
     * @param parentNodeKey    上级节点key
     * @return 流程节点
     */
    AbstractConfigNode parse(JSONObject jsonObject, String flowTemplateName, String parentNodeKey) throws ParseException;

    /**
     * 解析类的解析器
     *
     * @param parseClassInfo 解析器
     */
    void setParseClassInfo(ParseClassInfo parseClassInfo);

    /**
     * 节点基本信息解析器
     *
     * @param parseNodeBaseInfo 解析器
     */
    void setParseNodeBaseInfo(ParseNodeBaseInfo parseNodeBaseInfo);

    /**
     * 节点调度器
     *
     * @param parseNodeDispatcher 调度器
     */
    void setNodeDispatcher(ParseNodeDispatcher parseNodeDispatcher);

    /**
     * 设置解析条件的解析器
     *
     * @param parseCondition 解析器
     */
    void setParseCondition(ParseCondition parseCondition);
}
